Cryptography may be used to perform key exchanges to help protect the confidentiality and integrity of data and/or communications. Two types of cryptography are symmetric key cryptography and asymmetric or public-key cryptography. Symmetric key cryptography uses a single type of key. The same key is used both to encrypt data and to decrypt data. Also, the same key is used both to generate a digital signature and to verify the digital signature. In contrast, public-key cryptography uses two different types of keys. One of the keys is secret or private, whereas the other key is not secret but rather is publically available. The public and private keys are used for different complementary purposes. For example, the public key may be used to encrypt data, whereas the private key may be used to decrypt the encrypted data. As another example, the private key may be used to generate a digital signature, whereas the public key may be used to verify the digital signature.
Public-key cryptography is widely used. For example, public-key cryptography is widely used in various Internet standards or protocols, such as, for example, Secure Sockets Layer (SSL), Transport Layer Security (TLS), Internet Protocol Security (IPsec), Secure/Multipurpose Internet Mail Extensions (S/MIME), Pretty Good Privacy (PGP), and GNU Privacy Guard (GPG).
When such standards or protocols are employed over the Internet and/or other communication channels, an initial phase generally involves establishing the security of the channel, exchanging cryptographic keys, and verifying certificates. Various public key algorithms may be used. One public key algorithm is the Diffie-Hellman key exchange algorithm, which is sometimes referred to as Diffie-Hellman, or simply as D-H. The Diffie-Hellman algorithm is commonly used to securely exchange secret cryptographic keys over a public channel. Another public key algorithm is the Digital Signature Algorithm (DSA) algorithm. DSA is commonly used to provide digital signatures. Yet another public key algorithm is the RSA algorithm (named after its authors Rivest, Shamir, Adleman). RSA is commonly used to securely exchange secret cryptographic keys as well as to provide digital signatures. The secure communication channel can be setup using ECC operations (e.g., ECC point-multiplication instructions).